#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar serdata,mc_num;
void mocode(uchar msol);
void delay165us(void);
void delay500us(void);
void delay300ms(void);
void InitUART(void);
sbit fmq=P3^6;
void main()
{
	InitUART();
	while(1)
	{
		while(mc_num==0x00);
		if(serdata<0x3A)
		{
			if(serdata<=0x35&serdata!=0x30)
			{
				mocode(0);
				delay300ms();
				for(mc_num=0x31;mc_num>=0x34;mc_num++)
				{
					mocode(!(serdata-mc_num>=1));
					delay300ms();
				}
			}
			else
			{
				mocode(1);
				delay300ms();
				for(mc_num=0x36;mc_num>=0x39;mc_num++)
				{
					mocode(serdata-mc_num>=1);
					delay300ms();
				}
			}
		}
		else
		{
			if(serdata>0x60)
				mc_num=serdata-0x20;
			switch(serdata)
			{
				case 0x41:
				{
					mocode(0);
					delay300ms();
					mocode(1);
					delay300ms();
				}
				case 0x42:
				{
					mocode(1);
					delay300ms();
					mocode(0);
					delay300ms();
					mocode(0);
					delay300ms();
					mocode(0);
					delay300ms();
				}
				case 0x43:
				{
					mocode(1);
					delay300ms();
					mocode(0);
					delay300ms();
					mocode(1);
					delay300ms();
					mocode(0);
					delay300ms();
				}
				case 0x44:
				{
					mocode(1);
					delay300ms();
					mocode(0);
					delay300ms();
					mocode(0);
					delay300ms();
				}
				case 0x45:
				{
					mocode(0);
					delay300ms();
				}
				case 0x46:
				{
					mocode(0);
					delay300ms();
					mocode(0);
					delay300ms();
					mocode(1);
					delay300ms();
					mocode(0);
					delay300ms();
				}
				case 0x47:
				{
					mocode(1);
					delay300ms();
					mocode(1);
					delay300ms();
					mocode(0);
					delay300ms();
				}
			}
		}
	}
}
void mocode(uchar msol)
{
	uint mc_s;
	if(msol==0)
	{
		for(mc_s=500;mc_s>0;mc_s--)
		{
			fmq=0;
			delay165us();
			fmq=1;
			delay165us();
		}
	}
	else
	{
		for(mc_s=500;mc_s>0;mc_s--)
		{
			fmq=0;
			delay500us();
			fmq=1;
			delay500us();
		}
	}
}
void delay165us(void)   //?? 0us
{
    unsigned char a;
    for(a=164;a>0;a--);
}
void delay500us(void)   //?? 0us
{
    unsigned char a,b,c;
    for(c=1;c>0;c--)
        for(b=142;b>0;b--)
            for(a=2;a>0;a--);
}
void delay300ms(void)   //?? 0us
{
    unsigned char a,b,c;
    for(c=244;c>0;c--)
        for(b=8;b>0;b--)
            for(a=152;a>0;a--);
}
void InitUART(void)
{
    TMOD = 0x20;
    SCON = 0x50;
    TH1 = 0xF3;
    TL1 = TH1;
    PCON = 0x00;
    EA = 1;
    ES = 1;
    TR1 = 1;
}
void UARTInterrupt(void) interrupt 4
{
    if(RI)
    {
        RI = 0;
        serdata=SBUF;
    }
    else
        TI = 0;
}